<?php
//服务器端记录验证信息，便于用户表单输入后做校验
session_start();
//定义验证码字符
$str = "abcdefghijklmnopqrstuvwxyz0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ";
//打乱字符串
$str = str_shuffle($str);
//在乱的字符串中，从第一个位置开始产生，共产生5个
$code = substr($str, 0, 5);
//将产生的四位验证码赋值给超级全局变量，标记到服务器上，便于用户表单输入后校验
$_SESSION['captcha'] = $code;
//产生一个长100宽30的矩形，默认颜色为黑色
$image = imagecreatetruecolor(100, 30);
//将背景设置为白色，并从（0,0）处铺满地图
$bgcolor = imagecolorallocate($image, 255, 255, 255);
imagefill($image, 0, 0, $bgcolor);
//产生随机字体颜色
function randtextcolor($image) {
    return imagecolorallocate($image, rand(0, 120), rand(0, 120), rand(0, 120));
}
//在$image画布上，按照规定的字体大小、坐标、内容、颜色产生验证码
imagestring($image, rand(5, 8), rand(0, 50), rand(0, 15), $code, randtextcolor($image));
//产生随机干扰点颜色
function randpointcolor($image) {
    return imagecolorallocate($image, rand(70, 200), rand(70, 200), rand(70, 200));
}
//产生100个干扰点
for ($i = 0; $i < 100; $i++) {
    imagesetpixel($image, rand(1, 99), rand(1, 29), randpointcolor($image));
}
//随机产生干扰线颜色
function randlinecolor($image){
    return imagecolorallocate($image, rand(80, 220), rand(80, 220), rand(80, 220));
}
//产生3条干扰线
for($i=0;$i<3;$i++){
    imageline($image, 0, rand(0, 30), 100, rand(0, 30), randlinecolor($image));
}
//生成png图片
header("Content-Type:image/png");
imagepng($image);
//销毁图片
imagedestroy($image);